package com.wxf.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 简单模式
 */
public class Producer {
    public static String SIMPLE_QUEUE_1 = "simple_queue_01";
    public static String SIMPLE_QUEUE_2 = "simple_queue_02";
    public static void main(String[] args) {
        // 1-创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("192.168.127.131");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("123456");
        connectionFactory.setVirtualHost("/");
        // 2-创建连接
        Connection conn = null;
        Channel channel = null;
        try {
            conn = connectionFactory.newConnection("生产者");

            // 3-创建通道
            channel = conn.createChannel();
            // 4-声明队列
            // 参数说明：
            // 参数1：队列名称；
            // 参数2：是否持久化；
            // 参数3：排他性，是否独占队列，即只有一个消费者监听队列
            // 参数4：是否自动删除，即最后一个消费者消费完信息后是否自动删除队列
            // 参数5：携带附属参数
            channel.queueDeclare(SIMPLE_QUEUE_1,true,false,false,null);
            channel.queueDeclare(SIMPLE_QUEUE_2,true,false,false,null);

            // 5-准备消息内容
            String message = "Hello,wxf's rabbit";
            String message01 = "routingTest";
            // 6-发送消息给队列
            // 参数说明：
            // 参数1：交换机
            // 参数2：队列、路由key
            // 参数3：消息的状态控制
            // 参数4：消息主体
            channel.basicPublish("",SIMPLE_QUEUE_1,null,message.getBytes());
            channel.basicPublish("",SIMPLE_QUEUE_2,null,message01.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }finally {
            //7-关闭通道
            if(channel!=null&&channel.isOpen()){
                try {
                    channel.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (TimeoutException e) {
                    e.printStackTrace();
                }
            }
            // 8-关闭连接
            if(conn!=null&&conn.isOpen()){
                try {
                    conn.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
